package cn.zqy.demo.day10.demo02;

/**
 * 多态中访问【成员变量】：  两种。
 *      1.直接通过对象名称访问成员变量：【等号左边】是谁，优先用谁，没有则向上找。
 *      2.间接通过成员方法访问成员变量：该【方法】属于谁，优先用谁，没有则向上找。
 *
 * 访问【成员方法】：
 *      @看new的都是谁，就优先用谁，没有就向上找.
 *      口诀：编译看左边，运行看右边。
 *      注意：IDEA有红字，就是在编译
 *
 * 注意对比：
 *  成员变量：编译看左边，运行还看【左】边。
 *  成员方法：编译看左边，运行看右边。
 * */
public class Demo02MultiField {
    public static void main(String[] args) {

        // 1.访问变量。
        // 左侧【父类引用】指向了子类对象
        Demo02Fu obj = new Demo02Zi();

        //访问成员变量
        System.out.println(obj.num);   // 打印出父类的 10
        // System.out.println(obj.age);   // 子类有age，父类没有，该写法错误，变量访问obj指向父类
        System.out.println("================");

        /*
        * 子类如果没有覆盖重写，则是父类： num = 10
        * 子类如果覆盖重写，则是子类： num = 20
        * */
        obj.getNum();
        System.out.println("===============");

        // 2.访问方法。
        obj.method();  // 父子都有，优先用子
        obj.methodFu(); // 子没有，父有，向上找父。
        //【编译看左边，左边是Fu，Fu中没有methodZi，所以报错】。
        // obj.methodZi();   /*错误写法*/
    }
}
